package com.briup.day16;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.util.Random;
import java.util.TreeSet;

public class Homework {
    public static void main(String[] args) {
        // 将店铺信息存入到集合中管理起来，要求充值店铺必然展示在最前方；
        // 店铺的信息包括：店铺名称、是否充值的标识，以及店铺的销量，店铺的口碑评分
        TreeSet<Store> stores = new TreeSet<>();
        boolean[] flags = {true, false};
        Random random = new Random();
        // 存入5个店铺数据
        while (stores.size() < 5) {
            stores.add(Store.builder()
                    .name(random.nextInt() + "")
                    .salesNum(random.nextInt(200, 20001))
                    .score(random.nextDouble(5))
                    // 从true和false之间随机设置
                    .flag(flags[random.nextInt(flags.length)])
                    .build());
        }
        System.out.println(stores);
    }
}


@Data
@SuperBuilder
@NoArgsConstructor
class Store implements Comparable<Store> {
    // 店铺名称
    private String name;
    // 店铺销量
    private int salesNum;
    // 店铺评分
    private double score;
    // 是否充值的标识，true为已充值，false为未充值
    private boolean flag;

    @Override
    public int compareTo(Store o) {
        if (this.flag && !o.flag) {
            // 当前对象已充值，传入的对象未充值，那么直接返回-1，保证当前对象恒小于传入的o
            return -1;
        } else if (!this.flag && o.flag) {
            return 1;
        } else {
            // 如果两个店铺都是处于同一充值情况下，则比较两个店铺的评分，按照评分倒序排序，
            // 如果评分一样，那么按照销量倒序排序；如果销量也一样，那么按照店铺名称正序排序
            return this.score > o.score ? -1 : (this.score < o.score) ? 1 :
                    this.salesNum > o.salesNum ? -1 : (this.salesNum < o.salesNum) ? 1 :
                            this.name.compareTo(o.name);
        }
    }
}